import { get, post, put, del } from './api';

/**
 * 用户登录接口
 * @param data 登录数据
 * @returns 登录结果
 */
export const login = (data: { englishName: string; password: string }) => {
  return post<API.AuthResponse>('/users/login', data);
};

/**
 * 用户注册接口
 * @param data 注册数据
 * @returns 注册结果
 */
export const register = (data: {
  chineseName: string;
  englishName: string;
  password: string;
  role?: string;
}) => {
  return post<API.AuthResponse>('/users/register', data);
};

/**
 * 获取用户列表
 * @returns 用户列表
 */
export const getUserList = () => {
  return get<API.ListResponse<API.UserInfo>>('/users');
};

/**
 * 根据ID获取用户
 * @param id 用户ID
 * @returns 用户信息
 */
export const getUserById = (id: number) => {
  return get<API.Response<API.UserInfo>>(`/users/${id}`);
};

/**
 * 根据英文名获取用户
 * @param englishName 英文名
 * @returns 用户信息
 */
export const getUserByEnglishName = (englishName: string) => {
  return get<API.Response<API.UserInfo>>(`/users/by-name/${englishName}`);
};

/**
 * 更新用户信息
 * @param id 用户ID
 * @param data 用户数据
 * @returns 更新结果
 */
export const updateUser = (id: number, data: API.UserUpdateData) => {
  return put<API.Response<API.UserInfo>>(`/users/${id}`, data);
};

/**
 * 删除用户
 * @param id 用户ID
 * @returns 删除结果
 */
export const deleteUser = (id: number) => {
  return del<API.Response<null>>(`/users/${id}`);
};

/**
 * 获取所有用户的英文名/中文名列表
 * @returns 用户名称列表，格式为：englishName/chineseName
 */
export const getUserNames = () => {
  return get<API.Response<string[]>>('/users/names');
};

// 定义API类型
declare namespace API {
  // 通用响应类型
  interface Response<T> {
    code: number;
    message: string;
    data: T;
  }

  // 列表响应类型
  interface ListResponse<T> {
    code: number;
    message: string;
    data: T[];
  }

  // 用户信息类型
  interface UserInfo {
    id: number;
    chineseName: string;
    englishName: string;
    role: string;
    createTime: string;
    lastLoginTime: string | null;
  }

  // 用户更新数据类型
  interface UserUpdateData {
    chineseName?: string;
    englishName?: string;
    role?: string;
  }

  // 认证响应类型
  interface AuthResponse {
    code: number;
    message: string;
    data: {
      token: string;
      user: UserInfo;
    };
  }
} 